/*jslint maxerr: 50, indent: 4, browser: true */
/*global define */

(function (undef) {
    "use strict";

    define("object.hasOwnProperty", ["mergeModules", "init", "object.hasProperty"], function (make) {
        var buri = make.mergeModules(arguments),
            config = {
                "compatability": {}
            },
            func = {}.constructor.prototype.hasOwnProperty,
            hasOwnProperty;

        if (!config.compatability.all && !config.compatability["object.hasOwnProperty"] && typeof func === "function") {
            hasOwnProperty = function (obj, prop) {
                return func.call(obj, prop);
            }
        } else {
            hasOwnProperty = function (obj, prop) {
                var prototype = obj[proto] || obj.constructor.prototype;

                return hasProperty(obj, prop) && !hasProperty(prop, prototype || prototype[prop] !== obj[prop]);
            };
        }

        hasOwnProperty.init = function (options) {
            buri.init(config, options);
        };

        return {
            "object": {
                "hasOwnProperty": hasOwnProperty
            }
        };
    });
}());
